﻿#pragma once
#ifndef ICPIO_H
#define ICPIO_H

#include "ICPService.h"

class ICPIO {
  private:
    static ICPService* _service;

  public:
    ICPIO(ICPService* service);
    ~ICPIO();

    void readInput();

    void readParamDate();  // 自动日期范围
    void readParamRule();  // 自动121规则参数
    void readParamModel(); // 算法模型参数
    void readRuleOnOff();  // 规则开关
    void readRuleCCAR5();  // CCAR5标准
    void readParamKpi();   // 成本参数

    void readFleetList();           // 机型及机型组信息
    void readBaseList();            // 基地信息
    void readPairingConfigList();   // 任务环定义
    void readResLimitList();        // 基地资源约束
    void readAirportList();         // 机场信息
    void readAirportBreakList();    // 大过站机场
    void readAirportNightList();    // 过夜机场
    void readAirportTransferList(); // 换机机场
    void readAirportConfigList();   // 机场进场、退场、前车程、后车程时间
    void readBaseOverstaffList();   // 基地机组溢出单位成本系数
    void readBaseDirectList();      // 基地定向执行某些机场
    void readPatternList();         // 组环模板
    void readBestAirlineList();     // 精品航线（精品航线不能与非精品航线混排）
    // 读取历史DUTY中航班组合的占比，保证自动组环的DUTY与历史保持接近
    void readDutyRatioList();
    // 读取历史PAIRING中航班组合的占比，保证自动组环的DUTY与历史保持接近
    void readPairingRatioList();
    void readSchLegList();              // 航班信息
    void readPrevUnClosedPairingList(); // 生成承接回程的去程假置位
    void readDeadHeadGrdList();         // 坐车定义
    void readDeadHeadElfList();         // 闭环助手
    void readDeadHeadAirList();         // 坐机定义
    void readSchConfigB();              // 读取备份任务机组配置信息
    void readHrCrew();                  // 人员信息
    void readTechInfo();                // 人员技术等级
    void readPersonSchedule();          // 人员占位信息
    static void writeSln(vector<SchPairing*> pairingList);
    static void writeSlnPairingList(vector<SchPairing*> pairingList, string fName);
    static void writeSlnVBList(vector<SchLeg*> legList, string fName);

    void readVBList();
    void readPairingList();
};

#endif // !ICPIO_H